Computing systems execute operating systems and other software. Such computing systems can be virtualized, that is to say, executed within a virtual execution environment. Virtualization allows multiple virtual machines to share the same physical hardware. In virtualization, a computing system can be reduced to a program executing within a virtual execution environment. Such a program can be termed a virtual machine.
A virtual machine can provide a complete system platform which supports the execution of a complete operating system. One of the advantages of a virtual execution environment is that multiple operating systems (which may or may not be the same type of operating system) can coexist on the same physical platform. In addition, a virtual machine can have instructions and architecture that is different from that of a physical platform in which the virtual machine is implemented.
Typically, data and executable code for a virtual machine are stored in a virtual machine container. A “virtual machine container” is a logical storage unit that can be of either fixed or variable size, for example, a file formatted to include executable code and data storage. For storage purposes, an advantage of virtualization is that regardless of which computing system is executing a virtual machine, many virtual machine containers can be stored by a single hardware storage device, such as a storage system.
A storage system can include a computing system or set of computing systems that offer storage services to the one or more host computing systems via a storage server. For example, a storage server can be used in a storage area network (SAN), or network attached storage (NAS) can be used including one or more mass storage devices. A storage server can allow file level access or block level access to stored data, or both.
While a virtual machine container does not need to be stored on a storage server it can be done so in order to centralize the management of virtual machine containers. In use, the executable code and data stored in a virtual machine container are accessed by a host system, which can be the same computing system as the computing system storing the virtual machine container, or a different computing system. Different computing systems can be used to store virtual machine containers and execute virtual machines stored by the virtual machine containers. Often multiple hosting systems are used to execute the multiple virtual machines and the multiple hosting systems are connected to a storage server to retrieve data and executable code from the virtual machine containers stored in the storage server.
Multiple virtual machine containers can be stored for execution by one or more hosting systems as described above. However, a virtual machine container can become corrupted, data within the file can be lost, or other problems may occur, so as to require to the restoration of the container from a backup.
It should be noted that a “virtual machine” can refer to the virtualized computing system in execution on a hosting system in a virtual execution environment, however, the restoration of a “virtual machine” normally refers to the restoration of a virtual machine container.
One benefit of virtualization is that the restoration of an entire virtual machine container can be made quickly and efficiently. For example, an entire virtual machine container can be copied to a storage system from a backup system to restore the data included therein. In this way many virtual machine containers can be restored.
Restoration of a virtual machine container can be an expensive task in terms of use of the computing resources, e.g., processor and memory, relative to the total resources available to a host computing system. For restoration of multiple virtual machine containers, multiple host machines can be employed. The host machines can both execute restore operations and execute instructions for a virtual machine. The distribution of the load can vary such that each host does not receive an equal load of virtual machines to restore and execute. As used herein, the “load,” or “loading” refers to the extent of utilization of computing resources available to a host computing system.
Typically, an administrator selects a host for restoration of a virtual machine container. As such administrator time was required for the restoration of each virtual machine container. As many virtual machine container restorations became required, the toll on administrator time grew. Such administrators would not have sufficient time or resources to determine which hosting system would be the least likely to suffer a performance impact from a plurality of hosting systems. As a result of both the requirement for user input and the large loading requirements of the restoration of virtual machine containers, some hosts can become overloaded relative to other hosts.
Once a host is overloaded it can be costly in terms of resource utilization to change the host on which one or more virtual machines are executing, if it is even possible to move a virtual machine from one host to another. When a host is overloaded its performance tends to degrade. As a result, clients serviced by the host can experience a poor quality of service.